package com.jqyd.mod.orm;

import java.sql.SQLException;
import java.util.List;
import java.util.UUID;

import com.jqyd.mod.orm.exception.ORMException;
/**
 * 定义常用操作方法
 */
public interface ORM<T> extends ORMS{
	/**
	 * 添加数据
	 * @param t 实体类对象
	 * @return 返回操作行数
	 * @throws ORMException
	 */
	int insert(T t) throws ORMException;
	/**
	 * 根据字符型id删除数据
	 * @param recid 主键id(16位uuid||guid)字符串形式
	 * @return 返回操作行数
	 * @throws ORMException
	 */
	int delete(String recid) throws ORMException;
	/**
	 * 根据uuid对象删除数据
	 * @param recid uuid||guid
	 * @return	返回操作行数
	 * @throws ORMException
	 */
	int delete(UUID recid) throws ORMException;
	/**
	 * 自定义删除语句
	 * @param where delete语句where后面部分
	 * @param objs 参数数组
	 * @return int 返回响应条数
	 * @throws SQLException
	 */
	int delete(String where, Object...args) throws ORMException;
	/**
	 * 修改数据
	 * @param t 实体类对象
	 * @return 返回操作行数
	 * @throws ORMException
	 */
	int update(T t) throws ORMException;
	/**
	 * 自定义修改语句
	 * @param set update语句set后面部分
	 * @param objs 参数数组
	 * @return int 返回响应条数
	 * @throws SQLException
	 */
	int update(String set, Object...objs) throws ORMException;
	/**
	 * 根据字符型id查找数据
	 * @param recid 主键id(16位uuid||guid)字符串形式
	 * @return 实体对象
	 */
	T find(String recid);
	/**
	 * 根据uuid对象查询数据
	 * @param recid	uuid||guid
	 * @return	实体对象
	 */
	T find(UUID recid);
	/**
	 * 查询所有记录
	 * @return	盛放所有数据对象的list
	 * @throws ORMException
	 */
	List<T> getAll() throws ORMException;
	/**
	 * sql查询
	 * @param where	查询条件(可只为where后条件，也可为整句sql)
	 * @param args	占位符参数
	 * @return	盛放所有数据对象的list
	 * @throws SQLException
	 */
	List<T> query(String where, Object... args) throws ORMException;
	/**
	 * 分页查询
	 * @param where	查询条件
	 * @param startIndex 何处开始
	 * @param endIndex	何处结束
	 * @param args	占位符参数
	 * @return	盛放所有数据对象的list
	 * @throws ORMException
	 */
	List<T> queryPage(String where, long startIndex, long endIndex, Object... args) throws ORMException;
	/**
	 * 查询第一条数据(包含单条查询或多条查询)
	 * @param where 查询条件
	 * @param args	占位符参数
	 * @return	实体对象
	 * @throws SQLException
	 */
	T queryFirst(String where, Object...args) throws ORMException;
	/**
	 * 查询语句响应行数
	 * @param where	查询条件
	 * @param args	占位符参数
	 * @return int	响应行数
	 * @throws SQLException
	 */
	int queryRow(String where, Object...args) throws ORMException;
}
